package cn.tedu;

public class Test2_Design {
    public static void main(String[] args) {
        MySingletion m1 = MySingletion.getMy();
        System.out.println("m1="+m1);

        MySingletion m2 = MySingletion.getMy();
        System.out.println("m2="+m2);
    }
}
//创建自己的单例类
class MySingletion{
    //1.构造方法私有化--不让外界随便new
    private  MySingletion(){ }
    //2.外界没法new了，在类的内部new
    //加static的原因：是因为被静态资源getMy()关联了，静态只能调用静态
    static MySingletion my ;
    //3.对外提供全局访问点--公共的get()
    //加static的原因：想要访问类的资源--可以创建对象访问（现在不可能）--可以类名访问（static的特点）
    synchronized static public MySingletion getMy() {
        //懒汉式：不会第一时间new对象来占用内存，而是什么时候get什么时候new--延迟加载！！！
        //线程安全隐患？--共享资源被多条语句操作了-加锁--锁对象是类名.class()
       // synchronized (MySingletion.class) {
            if (my==null) {
                my = new MySingletion() ;
            }

            return my; //4.把my返回给外界的调用位置
        //}
    }
}




